자료구조의 개념

이 글에서는 PDT (Primitive Data Type), UDT (User-Defined Type), 그리고 ADT (Abstract Data Type) 가 무엇이며 PDT, UDT, ADT가 어떻게 자료구조 (Data Structure) 라는 개념을 구성하는지 알아봅니다.


PDT (Primitive Data Type)

PDT는 주로 원시 자료형이라 부르며, 프로그래밍 언어 수준에서 데이터를 담기 위한 가장 기본적인 형태의 자료형을 말한다. C를 예시로 들자면, int, char, double 등이 PDT에 속한다. PDT는 프로그래밍 언어를 구성하는 여러 요소 중 하나이며, 제거될 수 없다.

UDT (User-Defined Type)

UDT는 주로 사용자 정의 자료형이라 부르며, C의 구조체나 C++, Java, Python 등의 클래스처럼 프로그래밍 언어의 문법적 지원을 통해 사용자가 임의로 만든 자료형을 의미한다. PDT와 달리 프로그래밍 언어의 필수 요소가 아니며, 프로그래밍 언어 위에 구현된 개념에 가깝다.

ADT (Abstract Data Type)

ADT는 주로 추상 자료형이라 부르며, 프로그래밍 언어와 독립적인 개념으로 자료들과 그 자료들에 대한 연산을 아우르는 개념이다. 자료의 형태와 자료에 대한 연산은 ADT에 정의되어 있지만, 이에 대한 구체적인 구현은 ADT에 포함되지 않는다. 객체지향 프로그래밍을 지원하는 프로그래밍 언어들의 추상 클래스(Abstract Class) 와 밀접한 개념이다.

자료구조 (Data Structure) 의 탄생

이제 새로운 자료구조가 어떻게 구현되는지 보자. 사용자가 원하는 자료형이 없다면, 새로운 자료구조를 만들어 소스 코드에서 사용할 수 있어야 한다. 이때 새로운 자료구조가 코드에서 등장하려면 그 자료구조가 정의되어 있어야 한다. 새로운 자료구조에 담겨질 데이터가 어떤 모습인지, 그리고 그 자료구조와 어떤 상호작용이 가능한지 정의해야 그 정의에 맞게 자료구조를 구현할 수 있을 것이다. 이 과정이 바로 추상 자료형을 정의하는 과정이다. 구체적으로 무슨 일이 일어나는지는 일단 관심 밖이지만, 데이터가 어떤 모습인지, 그리고 어떤 연산을 했을 때 어떤 종류의 결과가 도출되어야 하는지 분명하게 정하는 것이 바로 ADT다.

자료구조를 구현하기 위해 필요한 요구사항이 모두 정해졌으니 이제 소스 코드에서 직접 구현해야 할 것이다. 이 과정이 바로 사용자 정의 자료형을 만드는 과정으로, 프로그래밍 언어를 통해 원하는 데이터와 인터페이스를 담은 자료구조를 구현한다. 구현된 자료구조의 구체적인 형태는 프로그래밍 언어마다 다를 수 있다. 예를 들어 C는 객체지향 프로그래밍을 지원하지 않기 때문에 객체지향 프로그래밍을 지원하는 C++, Java, Python과 자료구조를 구현한 코드의 전반적인 생김새가 다를 것이다.

다만 같은 객체지향 프로그래밍을 지원하는 프로그래밍 언어들일지라도 구체적인 코드는 다 다르다. 언어의 문법과 함께 자료구조를 구성하는 기초 요소는 결국 원시 자료형, PDT다. 자료구조를 정의하는 과정은 추상적인 아이디어부터 시작해서 그 아이디어를 컴퓨터에 맞게 구체화하는 과정이지만, 정의에 따라 구현된 자료구조를 구성하는 가장 기본적인 요소는 프로그래밍 언어의 가장 기본적인 구성 요소이기도 한 원시 자료형이다.


참고 자료 & 더보기

참고 자료

더보기